#pragma  once

namespace MomogenkyouSystem	{


class	IRenderable
{
public:
};

class	RenderableQuad	:	public IRenderable
{
public:
	float2	WidthHeight;	//	Width and Height, in Pixels
	float4	Position;
	
	float2	Scale;			//	Scale 
	float	Rotation;

	size_t	Frame;
	float2	TexPosition;	//	TexCoord x, y (0 ~ 1.0)
	float2	TexSize;		//	Relative Size values (0 ~ 1.0)

	float4	Color;			//	Color
};

class ModelRenderable	:	IRenderable
{
protected:
	bool		m_bVisible;
	D3DXHANDLE	m_hEffectParamBlock;
public:
	MATRIX		matWorld;

	__inline	bool		Visible()			const	{	return	m_bVisible;				}
	__inline	D3DXHANDLE	EffectBlock()		const	{	return	m_hEffectParamBlock;	}
};

class IBatch
{
public:
	virtual	void	Initialize() = 0;
	virtual	void	Shutdown() = 0;

	//	Lock the Batch, Try to minimize calls
	virtual void	Lock() = 0;
	//	Unlock the Batch, this should match the number of Lock Calls
	virtual void	Unlock() = 0;

	//	Feed Data into this batch call
	//	@param	pData			Specify Pointer to data.
	//	@param	iDataCount		Specify amount of data to feed. *This is not Memeory size
	virtual	void	Feed(	const	void	*	pData,
							const	size_t		iDataCount) = 0;

	//	Draws the Batch, try not to call this if Not feeding anything.
	virtual	void	Render() = 0;
};

//
//class IRenderable
//{
//	ALIGN(128);
//public:
//	virtual	bool		Visible()						=	0;
//	virtual	size_t		RenderQueue()					=	0;
//
//	virtual	IBatch	*	GetBatch()						=	0;
//
//	virtual	void		Update(const float & Interval)	=	0;
//	virtual	void		Render()						=	0;
//};

}